﻿' ******************************************************************************
' ** 
' **  Yahoo Finance Managed
' **  Written by Marius Häusler 2010
' **  It would be pleasant, if you contact me when you are using this code.
' **  Contact: YahooFinanceManaged@gmail.com
' **  Project Home: http://code.google.com/p/yahoo-finance-managed/
' **  
' ******************************************************************************
' **  
' **  Copyright 2010 Marius Häusler
' **  
' **  Licensed under the Apache License, Version 2.0 (the "License");
' **  you may not use this file except in compliance with the License.
' **  You may obtain a copy of the License at
' **  
' **    http://www.apache.org/licenses/LICENSE-2.0
' **  
' **  Unless required by applicable law or agreed to in writing, software
' **  distributed under the License is distributed on an "AS IS" BASIS,
' **  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' **  See the License for the specific language governing permissions and
' **  limitations under the License.
' ** 
' ******************************************************************************


Namespace Finance.Support

    ''' <summary>
    ''' Stores information of an stock index. Implements IID. Serializable. 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class YIndexID
        Inherits YID

        Friend mFinanceHelper As New FinanceHelper
        Private mDownloadComponents As Boolean = False
      
        ''' <summary>
        ''' The Yahoo index ID
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Overrides ReadOnly Property ID() As String
            Get
                Return IIf(mDownloadComponents, "@", "").ToString & MyBase.ID
            End Get
        End Property
        Public Overrides Sub SetID(ByVal id As String)
            Dim startsWith As Boolean = id.StartsWith("@")
            If startsWith Then mDownloadComponents = True
            MyBase.SetID(id.Replace("@", ""))
        End Sub
        ''' <summary>
        ''' The overloaded type of the financial product 
        ''' </summary>
        ''' <value></value>
        ''' <returns>Returns only [Index]. The type of an stock index is of course always [Index].</returns>
        ''' <remarks></remarks>
        Public Overrides Property Type() As FinancialSecurityType
            Get
                Return MyBase.Type
            End Get
            Set(ByVal value As FinancialSecurityType)
                MyBase.Type = FinancialSecurityType.Index
            End Set
        End Property
        ''' <summary>
        ''' Indicates whether the downloader will query all stocks of an index or not
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DownloadComponents() As Boolean
            Get
                Return mDownloadComponents
            End Get
            Set(ByVal value As Boolean)
                mDownloadComponents = value
            End Set
        End Property

        ''' <summary>
        ''' Default constructor
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New()
            MyBase.Type = FinancialSecurityType.Index
            mDownloadComponents = False
        End Sub
        ''' <summary>
        ''' Overloaded constructor
        ''' </summary>
        ''' <param name="id">The unmanaged ID</param>
        ''' <remarks></remarks>
        Public Sub New(ByVal id As String)
            Me.New()
            Me.SetID(id)
        End Sub
        ''' <summary>
        ''' Overloaded constructor
        ''' </summary>
        ''' <param name="id">The unmanaged ID</param>
        ''' <param name="downloadComponents">True, if you want to download all components of the index</param>
        ''' <remarks></remarks>
        Public Sub New(ByVal id As String, ByVal downloadComponents As Boolean)
            Me.New(id)
            mDownloadComponents = downloadComponents
        End Sub
        ''' <summary>
        ''' Overloaded constructor
        ''' </summary>
        ''' <param name="searchResult">The downloaded search result with the values</param>
        ''' <remarks></remarks>
        Public Sub New(ByVal searchResult As IDSearchResult)
            MyBase.New(searchResult)
            If searchResult.Type = FinancialSecurityType.Index Then
                Me.SetID(searchResult.ID)
            Else
                Throw New ArgumentException("The passed result is not an index", "result")
            End If
        End Sub

        ''' <summary>
        ''' Returns the full ID of the stock index.
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Overrides Function ToString() As String
            Return Me.ID
        End Function

        ''' <summary>
        ''' Proves if a search result represents an index
        ''' </summary>
        ''' <param name="result"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Shared Function IsValidSearchResult(ByVal result As IDSearchResult) As Boolean
            Return result.Type = FinancialSecurityType.Index
        End Function
    End Class

End Namespace